# Лекция: Jackson и работа с JSON в Java

Jackson - это библиотека в Java для работы с форматом JSON. Она позволяет преобразовывать объекты в JSON и обратно.

## Добавление Jackson в проект

Чтобы использовать Jackson, нужно добавить его в зависимости проекта.

```xml
<dependencies>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.12.3</version>
    </dependency>
</dependencies>
```

## Преобразование объектов в JSON

Jackson предоставляет класс `ObjectMapper` для преобразования объектов в JSON.

```java
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(object);
```

## Преобразование JSON в объекты

`ObjectMapper` также позволяет преобразовывать JSON в объекты.

```java
ObjectMapper objectMapper = new ObjectMapper();
MyClass object = objectMapper.readValue(json, MyClass.class);
```

---

# Практические задания

1. **Создайте класс `Product` с полями `id`, `name` и `price`. Преобразуйте объект `Product` в JSON.** (Сложность: 1/5)
```java
public class Product {
    private int id;
    private String name;
    private double price;
    // геттеры и сеттеры
}

Product product = new Product();
product.setId(1);
product.setName("Apple");
product.setPrice(0.99);

ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(product);
System.out.println(json); // выводит {"id":1,"name":"Apple","price":0.99}
```

2. **Преобразуйте JSON в объект `Product`.** (Сложность: 1/5)
```java
String json = "{\"id\":1,\"name\":\"Apple\",\"price\":0.99}";

ObjectMapper objectMapper = new ObjectMapper();
Product product = objectMapper.readValue(json, Product.class);
System.out.println(product.getName()); // выводит "Apple"
```

3. **Создайте класс `Order` с полями `id`, `userId` и `products` (список `Product`). Преобразуйте объект `Order` в JSON.** (Сложность: 2/5)
```java
public class Order {
    private int id;
    private int userId;
    private List<Product> products;
    // геттеры и сеттеры
}

Order order = new Order();
order.setId(1);
order.setUserId(1);
order.setProducts(Arrays.asList(product));

ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(order);
System.out.println(json); // выводит {"id":1,"userId":1,"products":[{"id":1,"name":"Apple","price":0.99}]}
```

4. **Преобразуйте JSON в объект `Order`.** (Сложность: 2/5)
```java
String json = "{\"id\":1,\"userId\":1,\"products\":[{\"id\":1,\"name\":\"Apple\",\"price\":0.99}]}";

ObjectMapper objectMapper = new ObjectMapper();
Order order = objectMapper.readValue(json, Order.class);
System.out.println(order.getProducts().get(0).getName()); // выводит "Apple"
```

5. **Создайте класс `User` с полями `id`, `name`, `email` и `orders` (список `Order`). Преобразуйте объект `User` в JSON и обратно.** (Сложность: 3/5)
```java
public class User {
    private int id;
    private String name;
    private String email;
    private List<Order> orders;
    // геттеры и сеттеры
}

User user = new User();
user.setId(1);
user.setName("John Doe");
user.setEmail("john.doe@example.com");
user.setOrders(Arrays.asList(order));

ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(user);
System.out.println(json); // выводит JSON

User parsedUser = objectMapper.readValue(json, User.class);
System.out.println(parsedUser.getName()); // выводит "John Doe"
```